00001 #include <string.h> 00002 #include <stdio.h> 00003 #include <stdlib.h> 00004 #include <avr/interrupt.h> 00005 #include <avr/signal.h> 00006 #include "lcd.h" 00007 #include "GSMParser.h" 00008 00009 int count; 00010 int fora = 0; 00011 00012 void InitGSMParser() 00013 { 00014 GSMstate=0; 00015 GSM_CMD_count=0; 00016 GSM_COMMAND_count=0; 00017 count=0; 00018 } 00019 void GSMFeedBuffer (char pdata) 00020 { 00021 GSMdata=pdata; 00022 ProcessGSM(); 00023 } 00024 00025 int ProcessGSMCOM() 00026 { 00027 if (GSM_CMD_count < 3) 00028 { 00029 GSM_CMD[GSM_CMD_count]=GSMdata; 00030 GSM_CMD_count++; 00031 return 0; 00032 } 00033 if (GSM_CMD_count == 3) 00034 { 00035 GSM_CMD[GSM_CMD_count]=GSMdata; 00036 GSM_CMD_count=0; 00037 return 1; 00038 } 00039 return -1; 00040 } 00041 00042 int ProcessGSMLEX() 00043 { 00044 if (GSM_COMMAND_count < 20) 00045 { 00046 GSM_COMMAND[GSM_COMMAND_count]=GSMdata; 00047 GSM_COMMAND_count++; 00048 return 0; 00049 } 00050 if (GSM_COMMAND_count == 20) 00051 { 00052 GSM_COMMAND[GSM_COMMAND_count]=GSMdata; 00053 GSM_COMMAND_count=0; 00054 return 1; 00055 } 00056 return -1; 00057 } 00058 00059 void ProcessGSM() 00060 { 00061 switch (GSMstate) 00062 { 00063 case 0: 00064 if (GSMdata=='+') 00065 { 00066 GSMstate=3; 00067 //lcd_gotoxy(0,0); 00068 } 00069 break; 00070 case 1: 00071 if (ProcessGSMCOM()==1) 00072 { 00073 GSMstate=2; 00074 } 00075 case 2: 00076 if (GSM_CMD[1]=='C'&&GSM_CMD[1]=='L'&&GSM_CMD[1]=='I'&&GSM_CMD[1]=='P'){ 00077 GSMstate=3;} 00078 break; 00079 case 3: 00080 lcd_gotoxy(0,2); 00081 lcd_puts("RING"); 00082 if (ProcessGSMLEX()==1) 00083 { 00084 cli(); 00085 lcd_gotoxy(0,4); 00086 GSMstate=0; 00087 sei(); 00088 if (GSM_COMMAND[7]=='+') 00089 { 00090 //phone number detected send SMS now ! 00091 ReportPosition(); 00092 } 00093 } 00094 00095 break; 00096 default: GSMstate=0; 00097 } 00098 } 00099
1.5.3